package demo4;

import java.util.LinkedList;
import java.util.Queue;

class MyStack {
    Queue<Integer> qu1;
    Queue<Integer> qu2;

    public MyStack() {
        qu1 = new LinkedList<>();
        qu2 = new LinkedList<>();
    }
    
    public void push(int x) {
        if (empty()) {
            //如果两个队列都为空的话  就放到第一个队列中
            qu1.offer(x);
        } else if (!qu1.isEmpty()) {
            //如果qu1不为空  就放到qu1中
            qu1.offer(x);
        } else {
            //否则就放入qu2中
            qu2.offer(x);
        }
    }
    
    public int pop() {
        if (empty()) 
            //判断是不是为空
            return -1;
        if (!qu1.isEmpty()) {
            //如果qu1不为空  就把qu1中的元素倒入qu2中 长度为size-1 
            //然后再把qu1中的最后一个元素进行删除操作
            int val = 0;
            int size = qu1.size();  
            //重 重 如果下面直接写成 i < qu1.size() - 1  是错的
            //因为size()一直在改变  因为一直在进行poll()操作
            for (int i = 0; i < size - 1 ; i++){
                val = qu1.poll();
                qu2.offer(val);
            }
            //再把qu1中的最后一个值删掉
            val = qu1.poll();
            return val;
        } else {
            //否则qu2就是不为空的队列  就把qu2中的元素倒入qu1中 长度为size-1 
            //然后再把qu2中的最后一个元素进行删除操作
            int val = 0;
            int size = qu2.size();  
            //重 重 如果下面直接写成 i < qu2.size() - 1  是错的
            //因为size()一直在改变  因为一直在进行poll()操作
            for (int i = 0; i < size - 1 ; i++){
                val = qu2.poll();
                qu1.offer(val);
            }
            //再把qu2中的最后一个值删掉
            val = qu2.poll();
            return val;
        }
    }
    
    public int top() {
        if (empty()) 
            //判断是不是为空
            return -1;
        if (!qu1.isEmpty()) {
            int val = 0;
            int size = qu1.size();  
            for (int i = 0; i < size ; i++){
                val = qu1.poll();
                qu2.offer(val);
            }
            return val;
        } else {
            int val = 0;
            int size = qu2.size();  
            for (int i = 0; i < size; i++){
                val = qu2.poll();
                qu1.offer(val);
            }
            return val;
        }
    }
    
    public boolean empty() {
        if (qu1.isEmpty() && qu2.isEmpty()) {
            return true;
        }
        return false;
    }
}

/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack obj = new MyStack();
 * obj.push(x);
 * int param_2 = obj.pop();
 * int param_3 = obj.top();
 * boolean param_4 = obj.empty();
 */